package graph

import "gonum.org/v1/gonum/graph/simple"

/*
graph/

	├── simple   —— 常用简单图实现（最常用）
	├── multi    —— 多重图
	├── path     —— 最短路径算法
	├── topo     —— 拓扑排序
	├── flow     —— 最大流
	├── traverse —— BFS/DFS 遍历器
	├── community—— 社区划分（图聚类）
*/
func Graph() *simple.UndirectedGraph {
	g := simple.NewUndirectedGraph()

	n1 := simple.Node(1)
	n2 := simple.Node(2)

	g.AddNode(n1)
	g.AddNode(n2)

	// 添加边
	g.SetEdge(g.NewEdge(n1, n2))
	return g
}

func DirectedGraph() *simple.DirectedGraph {
	g := simple.NewDirectedGraph()

	n1 := simple.Node(1)
	n2 := simple.Node(2)

	g.AddNode(n1)
	g.AddNode(n2)
	edge := g.NewEdge(n1, n2)
	g.SetEdge(edge) // n1 → n2
	return g
}

func WeightedDirectedGrap() *simple.WeightedDirectedGraph {
	g := simple.NewWeightedDirectedGraph(0, 0)

	n1 := simple.Node(1)
	n2 := simple.Node(2)

	g.AddNode(n1)
	g.AddNode(n2)

	edge := simple.WeightedEdge{F: n1, T: n2, W: 3.5}
	g.SetWeightedEdge(edge)
	return g
}
